【量化】seaborn在金融数据可视化中的应用
《python与量化投资从基础到实战》学习笔记 tips:如果没时间阅读,可收藏本文或者直接滑动到文末获取本项目代码下载链接
seaborn库是以matplotlib为基础,同时支持numpy、pandas数据结构以及scipy和statsmodels的统计结果。
seaborn的主要功能有:
内置主题
丰富的调色板,更好的显示数据信息
对变量分布进行了可视化
数据矩阵可视化,并使用聚类算法发现这些矩阵中的结构
对自变量和因变量之间的线性回归结果进行可视化
绘制统计时间序列,并将其不确定性可视化
构建高级、抽象的网格图,可轻松将复杂问题可视化
1. 主题管理
seaborn的抢眼的亮点是内置了经过美化的主题,无序调制参数即可绘制漂亮的可视化。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#windows用户可使用下方的中文显示方法
#plt.rcParams['font.sans-serif'] = ['SimHei']
#plt.rcParams['axes.unicode_minus']=False
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 7):
#随便设计的y函数
plt.plot(x, np.sin(x+i*0.5)*x)
sinplot()
接下来,引入seaborn模块,sns.set_style(style)可以设置主题,
style参数可以传入字典或者 "darkgrid","whitegrid","dark","white","ticks"
import seaborn as sns
#window有效,mac本代码无效
sns.set_style(style={"font.sans-serif":['Microsoft YaHei', 'SimHei']})
sinplot()
plt.figure(figsize=(12, 8))
sns.set_style('darkgrid')
plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)
sinplot()
sns.set_style('whitegrid')
plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)
sinplot()
sns.set_style('dark')
plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)
sinplot()
sns.set_style('ticks')
plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)
sinplot()
seaborn的sns.setcontext(context, fontscale)函数的context一共有四种内置主题(paper、talk、poster、notebook),font_scale负责字体大小。
plt.figure(figsize=(12, 8))
sns.set_context('paper')
plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)
sinplot()
sns.set_context('talk')
plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)
sinplot()
sns.set_context('poster')
plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)
sinplot()
sns.set_context('notebook')
plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)
sinplot()
2.调色板
seaborn拥有丰富的调色板,大致分为循环、渐变、混合三类,利用sns.setpalette(palette, ncolors=None, desat=None)函数来进行设置。
palette: seaborn颜色风格
ncolors: 整数型,绘制的颜色种类
desat: 每种颜色的去饱和度比例
plt.figure(figsize=(12, 8))
sns.set_palette("muted")
plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)
plt.title('Cycle') #循环
sinplot()
sns.set_palette("Blues_d")
plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)
plt.title('Low2Deep') #由浅到深
sinplot()
sns.set_palette("Reds")
plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)
plt.title('Reds') #红
sinplot()
sns.set_palette("RdBu")
plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)
plt.title('Red2Blue') #由红到蓝
sinplot()
3.分布图
seaborn除了提供更美观的可视化,还提供辅助图形,使我们更快捷的得到可视化的结果。先看看最简单的正太分布直方图,在seaborn中,sns.distplot类似于matplotlib中的hist函数,但还提供了kde和rug参数选择是否显示核密度估计和边际毛毯图。
import numpy as np
size=1000
rn1 = np.random.standard_normal(size)
plt.figure(figsize=(12, 8))
plt.subplot(221)
plt.title('hist of matplotlib')
plt.hist(rn1, bins=25)
plt.subplot(222)
plt.title('sns.distplot')
sns.distplot(rn1, bins=25)
plt.subplot(223)
plt.title('sns.distplot & kde')
sns.distplot(rn1, bins=25, kde=True)
plt.subplot(224)
plt.title('sns.distplot & kde & rug')
sns.distplot(rn1, bins=25, kde=True, rug=True)
相比于matplotlib,使用seaborn画出的图更加美观。使用sns.joinplot()函数还可以更细致的显示两个变量之间的关系
sns.joinplot(x, y, data, kind):
x:横坐标轴,dataframe中的列名
y:纵坐标轴,dataframe中的列名
data: dataframe数据
kind: “scatter” | “reg” | “resid” | “kde” | “hex”
import pandas as pd
tips = pd.read_csv('data/tips.csv')
tips.head()
#plt.title('reg')
sns.set(style="white")
#你们也可以回去试试kind的其他参数
sns.jointplot("total_bill", "tip", data=tips, kind="reg")
4.矩阵图
在金融领域中,我们常常需要利用heatmap将各种历史表现可视化。我们看看个股票月份的收益率汇总
import pandas as pd
import numpy as np
stocks = pd.read_excel('data/stock_data.xlsx')
date = stocks.pop('date')
returns = np.log(stocks.pct_change()+1)
returns['date'] = [str(t)[5:7] for t in date]
returns.dropna(inplace=True)
returns.set_index('date', inplace=True)
groupby_returns = returns.groupby(returns.index).sum()
groupby_returns
plt.figure(figsize=(10, 8))
plt.title('return of the stock by month')
sns.heatmap(groupby_returns, annot=True, linewidths=0.5)
5. 结构网络图
结构网络图可以帮助我们更直观的获取各变量之间的关系,如果使用matplotlib,不得不需要使用for循环,实现过程比较繁琐。而seaborn让这一切只需要一行代码即可实现。这里我们用sns.pairplot()
sns.pairplot(returns)
对角线是各个股票自身的对数收益率,学到这里有没有爱上python,喜欢上seaborn。
相关文章
公众号后台回复”20190328"得本项目代码
给我好看、留言、share